package com.zcg.blogger.dao;

import java.util.List;
import java.util.Map;

import com.zcg.blogger.model.Article;
import com.zcg.blogger.model.ArticleLable;
import com.zcg.blogger.model.CategoryArticle;
import com.zcg.blogger.model.Comment;
import com.zcg.blogger.model.User;

public interface ArticleDao {
	
	/**
	 * 插入一篇文章
	 * @param article 文章
	 * @return 操作值
	 */
	public int insert(Article article);

	/**
	 * 更新已有的文章
	 * @param article 文章
	 * @return 操作值
	 */
	public int update(Article article);

	/**
	 * 删除一篇文章
	 * @param id 文章id
	 * @return 操作值
	 */
	public int delete(int id);

	/**
	 * 查询所有文章列表
	 * @param map 
	 * @return 装有文章对象的list集合
	 */
	public List<Article> selectAll(Map map);
	
	/**
	 * 查询文章总数
	 * @return 文章总数
	 */
	public int countAll();
	
	/**
	 * 根据用户id查询文章列表
	 * @param map 
	 * @return
	 */
	public List<Article> findArticleAllByUser(Map<String, User> map);
	
	/**
	 * 根据用户id查询最近文章列表
	 * @param map
	 * @return
	 */
	public List<Object> findArticleByUserId(Map map);
	
	/**
	 * 根据用户id查询最近文章列表
	 * @param map
	 * @return
	 */
	List<Object> findNewestArticleByUserId(Map map);	
	
	/**
	 * 根据文章id查询评论列表
	 * @param map 
	 * @return
	 */
	public List<Comment> findCommentByArticleId(Map<String, Article> map);
		
	/**
	 * 根据文章id查询评论列表和评论用户
	 * @param map
	 * @return
	 */
	public List<Comment> findCommentUserByArticleId(Map<String, Article> map);
	
	/**
	 * 根据id获取文章内容
	 * @param id
	 * @return
	 */
	public Article findArticleById(int id);
	
	/**
	 * 根据id查询上一篇文章
	 * @param id
	 * @return
	 */
	public Article findNextById(int id);
	
	/**
	 * 根据id查询下一篇文章
	 * @param id
	 * @return
	 */
	public Article findPreviousById(int id);
	
	
	/**
	 * 查询前10的文章
	 * @return
	 */
	public List<Article> selectHot();
	
	/**
	 * 修改文章点赞数加一
	 * @param id
	 */
	public void addPraise(int id);
	
	/**
	 * 插入文章的类别
	 * @param article
	 */
	public void insertCategorys(List<CategoryArticle> categoryArticles);
	
	/**
	 * 插入文章的标签
	 * @param article
	 */
	public void insertLables(List<ArticleLable> articleLable);
	
}
